package src.Aula05.Ex03;
import java.util.*;
import src.Aula05.Ex02.*;




public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Escolha uma opção ");
        String indice=("1 - inscrever utilizador \n2 - remover utilizador \n3 - imprimir lista de utilizadores \n4 - registar um novo livro \n5 - imprimir lista de livros \n6 - emprestar \n7 - devolver \n8 - sair");
        System.out.println(indice);
        int ans= sc.nextInt();
        sc.nextLine();
        ArrayList<Utilizador> utilizadores = new ArrayList<>();
        ArrayList<Livro> livros = new ArrayList<>();

        while (ans!=8){

            if (ans==1){

                System.out.println("Insira o nome do novo utilizador");
                String nome= sc.nextLine();

                System.out.println("Insira o nMec do novo utilizador");
                int nMec= sc.nextInt();
                sc.nextLine();

                System.out.println("Insira o curso do novo utilizador");
                String curso= sc.nextLine();

                Utilizador novoUtilizador= new Utilizador(nome,nMec,curso);
                utilizadores.add(novoUtilizador);
                System.out.println(novoUtilizador+" inscrito!");

                System.out.println(indice);
                ans= sc.nextInt();
                sc.nextLine();
            }

            if (ans==2){

                List<String> toRemove = new ArrayList<String>();

                System.out.println("Insira o nMec do utilizador a remover");
                int nMecR= sc.nextInt();
                sc.nextLine();

                for (int i = 0; i < utilizadores.size(); i++) {
                    if (utilizadores.get(i).getnMec() == nMecR) {
                        utilizadores.remove(i);
                    }
                System.out.println("Utilizador: "+nMecR+" Removido!");
                System.out.println(indice);
                ans= sc.nextInt();
                sc.nextLine();
            }

            if (ans==3){
                System.out.println("Lista de utilizadores: " + utilizadores);
                System.out.println(indice);
                ans= sc.nextInt();
                sc.nextLine();
            }

            if (ans==4){

                System.out.println("Insira o nome do livro a resgistar ");
                String titulo= sc.nextLine();

                System.out.println("Insira o tipo de emprestimo do livro (normal/condicional) ");
                String emprestimo= sc.nextLine();

                Livro novoLivro= new Livro(titulo,emprestimo);
                livros.add(novoLivro);
                System.out.println("Livro: "+novoLivro+" inscrito!");
                System.out.println(indice);
                ans= sc.nextInt();
                sc.nextLine();
            }

            if (ans==5){
                System.out.println("Lista de livros: " + livros);
                System.out.println(indice);
                ans= sc.nextInt();
                sc.nextLine();
            }

            if (ans==6){
                System.out.println("Insira o nMec do utilizador ");
                int nMecReq = sc.nextInt();
                System.out.println("Insira o Id do livro ");
                int IdReq = sc.nextInt();

                
                boolean emprestadoComSucesso = false;

                for (Utilizador utilizador : utilizadores) {
                    if (emprestadoComSucesso)
                        break;
                    else if (utilizador.getnMec() == nMecReq && utilizador.getLivrosRequisitados().size() < 3) {

                        for (Livro livro : livros)
                            if (emprestadoComSucesso){
                                System.out.println("Livro emprestado com sucesso!");
                                System.out.println(indice);
                                ans= sc.nextInt();
                                sc.nextLine();
                            }

                            else if (livro.getId() == IdReq && livro.getTipoEmprestimo().equals("NORMAL") && livro.getDisponibilidade() == true) {
                                utilizador.adicionarIdLivroRequisitado(IdReq);
                                livro.setDisponibilidade(false);
                                emprestadoComSucesso = true;
                            }
                        
                    }
                }
                    
                    if (!emprestadoComSucesso){
                        System.out.println("Sem possibilidade de emprestar o livro");
                        System.out.println(indice);
                        ans= sc.nextInt();
                        sc.nextLine();
                    }
            }   
            
            if (ans==7){
                System.out.print("Insira o nMec do utilizador ");
                int nMecD = sc.nextInt();
                System.out.print("Insira o Id do livro a devolver ");
                int idD = sc.nextInt();

                boolean devolvidoComSucesso = false;

                for (Utilizador utilizador : utilizadores) {
                    if (devolvidoComSucesso)
                        break;
                    else if (utilizador.getnMec() == nMecD && utilizador.getLivrosRequisitados().contains(idD)) {
                        for (Livro livro : livros)
                            if (devolvidoComSucesso){
                                System.out.println(indice);
                                ans= sc.nextInt();
                                sc.nextLine();
                            }

                            else if (livro.getId() == idD) {
                                utilizador.removerIdLivroRequisitado(idD);
                                livro.setDisponibilidade(true);
                                devolvidoComSucesso = true;
                                System.out.println(indice);
                                ans= sc.nextInt();
                                sc.nextLine();
                            }
                    }

                if (!devolvidoComSucesso)
                    System.out.println("Sem possibilidade de devolver o livro");
                    System.out.println(indice);
                    ans= sc.nextInt();
                    sc.nextLine();
                }
            } 
            
            if (ans==8){
                sc.close();
                System.exit(0);}
            }

            else{
                System.out.println("Erro, input inválido!");
                System.out.println(indice);
                    ans= sc.nextInt();
                    sc.nextLine();
            }
        }  

   

}
}